package san.java.day10;

import java.util.ArrayList;
import java.util.List;

/**
 * List与ArrayList:
 *  List代表一个元素有序, 且可重复的集合, 集合中的每个元素都有其对应的顺序索引
 *
 *  List的特点:
 *      1. List允许使用重复元素, 可以通过索引来访问指定位置的集合元素
 *      2. List默认按照元素的添加顺序设置元素的索引
 *      3. List集合里添加了一些索引来操作集合元素的方法
 *
 *  List常用方法:
 *      1. 添加元素: add(Object 0)
 *                  add(int index, Object o)
 *                  addAll(int index, List<>)
 *      2. 移除元素:
 *                  remove(int index)
 *                  remove(Object o)
 *      3. subList:(浅拷贝)
 *                  subList(int start, int end)
 *      4. 查找指定元素
 *                  indexOf(Object o)
 *                  lastIndexOf(Object o)
 *      5. get(int index), set(int index)
 *
 *  ArrayList和Vector的区别
 *      1. Vector是一个古老的集合实现,通常建议使用ArrayList
 *      2. ArrayList是线程不安全的,而Vector是线城安全的
 *      3. 即使为保证List集合线程安全,也不推荐使用Vector,而使用其他形式
 */

public class List_06 {
    public static void main(String[] args) {
        List<String> sList = new ArrayList<String>();
        sList.add("san");
        sList.add("lisi");
        sList.add("wangwu");
        sList.add("audy");
        sList.add("san");  // 允许重复元素

        // 在指定下标处增加元素:
        sList.add(1, "f");
        System.out.println(sList);

        List<String> t = new ArrayList<String>();
        t.add("a");
        t.add("b");

        sList.addAll(1, t);
        System.out.println(sList);

        // 获取指定元素在集合中 第一次/最后一次 出现的索引下标
        System.out.println(sList.indexOf("san"));
        System.out.println(sList.lastIndexOf("san"));

        // 移除元素
        sList.remove(0);
        sList.remove("san");
        System.out.println(sList);

        // subList 截取原List,构成一个新的集合,截取的时候是前开后闭区间
        // 截取出来的subList对象,相当于是浅拷贝
        List<String> subList = sList.subList(0, 4);
        subList.set(0, "test");
        System.out.println(subList);
        System.out.println(sList);

    }
}
